package com.android.mytableview

import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.widget.HorizontalScrollView
import android.widget.LinearLayout
import androidx.appcompat.app.AppCompatActivity
import com.itc.locktableview.locktableview.LockTableView
import com.itc.locktableview.xrecyclerview.ProgressStyle
import com.itc.locktableview.xrecyclerview.XRecyclerView

class MainActivity : AppCompatActivity() {

    private var mContentView: LinearLayout? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        initTableView()

    }

    private fun initTableView(){
        mContentView = findViewById(R.id.contentView)

        //构造假数据
        val column = 4
        val row = 8
        //构造假数据
        val mTableDatas = ArrayList<ArrayList<String>>()
        val mfirstData = ArrayList<String>()
        mfirstData.add("")
        for (i in 0..column) {
            mfirstData.add("标题$i")
        }
        mTableDatas.add(mfirstData)
        for (i in 0..row) {
            val mRowDatas = ArrayList<String>()
            mRowDatas.add("标题$i")
            for (j in 0..column) {
                mRowDatas.add("${i}行${j}列")
            }
            mTableDatas.add(mRowDatas)
        }
        val mLockTableView = LockTableView(this, mContentView, mTableDatas)
        Log.e("表格加载开始", "当前线程：" + Thread.currentThread())
        mLockTableView.setLockFirstColumn(true) //是否锁定第一列
            .setLockFristRow(true) //是否锁定第一行
            .setMaxColumnWidth(60) //列最大宽度
            .setMinColumnWidth(60) //列最小宽度
//            .setColumnWidth(1, 30) //设置指定列文本宽度
//            .setColumnWidth(2, 20)
            .setMinRowHeight(30) //行最小高度
            .setMaxRowHeight(30) //行最大高度
            .setTextViewSize(16) //单元格字体大小
            .setFirstRowMarginBottom(10)//第一个行底部距离
            .setFirstGridLineWidth(10)//第一个格子右侧分割线宽度
            .setFirstRowBackgroundColor(R.color.transparent) //表头背景色
            .setFirstRowBackgroundScrollDrawable(R.drawable.bg_table_header)//表头第一格除外的背景色
            .setFirstColumnBackgroundDrawable(R.drawable.bg_table_header)//第一列背景颜色除第一格
            .setFirstGridBackgroundDrawable(R.drawable.bg_table_header)//第一个格子背景
            .setFirstGridLineBackgroundColor(R.color.transparent)//第一个格子右侧分割线背景颜色
            .setFirstColumnLineBackgroundDrawable(R.color.transparent)//第一列右侧分割线背景颜色
            .setFirstColumnLineWidth(10)//第一列右侧分割线宽度
            .setTableHeadTextColor(R.color.black) //表头字体颜色
            .setTableContentTextColor(R.color.white) //单元格字体颜色
            .setCellPadding(0) //设置单元格内边距(dp)
            .setNullableString("N/A") //空值替换值
            .setTableViewListener { x, y ->

            }
            //设置横向滚动回调监听
            .setTableViewRangeListener(object : LockTableView.OnTableViewRangeListener {
                override fun onLeft(view: HorizontalScrollView?) {
                    Log.e("滚动边界", "滚动到最左边")
                }

                override fun onRight(view: HorizontalScrollView?) {
                    Log.e("滚动边界", "滚动到最右边")
                }

            })
            .setOnLoadingListener(object : LockTableView.OnLoadingListener {
                override fun onRefresh(
                    mXRecyclerView: XRecyclerView?,
                    mTableDatas: java.util.ArrayList<java.util.ArrayList<String>>?
                ) {
                    Log.e("onRefresh", Thread.currentThread().toString())
                    val handler = Handler()
                    handler.postDelayed({ //                                Log.e("现有表格数据", mTableDatas.toString());
                        //构造假数据
                        val mTableDatas = ArrayList<ArrayList<String>>()
                        val mfristData = ArrayList<String>()
                        mfristData.add("标题")
                        for (i in 0..column) {
                            mfristData.add("标题$i")
                        }
                        mTableDatas.add(mfristData)
                        for (i in 0..row) {
                            val mRowDatas = ArrayList<String>()
                            mRowDatas.add("标题$i")
                            for (j in 0..column) {
                                mRowDatas.add("数据$j")
                            }
                            mTableDatas.add(mRowDatas)
                        }
                        mLockTableView.setTableDatas(mTableDatas)
                        mXRecyclerView?.refreshComplete()
                    }, 1000)
                }

                override fun onLoadMore(
                    mXRecyclerView: XRecyclerView?,
                    mTableDatas: java.util.ArrayList<java.util.ArrayList<String>>?
                ) {
                    Log.e("onLoadMore", Thread.currentThread().toString())
                    val handler = Handler()
                    handler.postDelayed({
                        if (mTableDatas!!.size <= 60) {
                            for (i in 0..column) {
                                val mRowDatas = ArrayList<String>()
                                mRowDatas.add("标题" + (mTableDatas.size - 1))
                                for (j in 0..column) {
                                    mRowDatas.add("数据$j")
                                }
                                mTableDatas?.add(mRowDatas)
                            }
                            mLockTableView.setTableDatas(mTableDatas)
                        } else {
                            mXRecyclerView?.setNoMore(true)
                        }
                        mXRecyclerView?.loadMoreComplete()
                    }, 1000)
                }

            })
            .setOnItemClickListenter { item, position ->
                Log.e(
                    "点击事件",
                    position.toString() + ""
                )
            }
            .setOnItemLongClickListenter { item, position ->
                Log.e("长按事件", position.toString() + "")
            }
            .setOnItemSeletor(R.color.colorPrimary) //设置Item被选中颜色
            .show() //显示表格,此方法必须调用

        mLockTableView.getTableScrollView().setPullRefreshEnabled(false)
        mLockTableView.getTableScrollView().setLoadingMoreEnabled(false)
        mLockTableView.getTableScrollView().setRefreshProgressStyle(ProgressStyle.SquareSpin)
        //属性值获取
        Log.e("每列最大宽度(dp)", mLockTableView.getColumnMaxWidths().toString())
        Log.e("每行最大高度(dp)", mLockTableView.getRowMaxHeights().toString())
        Log.e("表格所有的滚动视图", mLockTableView.getScrollViews().toString())
        Log.e("表格头部固定视图(锁列)", mLockTableView.getLockHeadView().toString())
        Log.e("表格头部固定视图(不锁列)", mLockTableView.getUnLockHeadView().toString())

    }

    // 生成指定长度的字母组合
    private fun generateCombinations(length: Int) {
        val max = Math.pow(26.0, length.toDouble()).toInt() // 计算组合总数
        for (i in 0 until max) {
            val combination = StringBuilder()

            // 构建字母组合
            for (j in 0 until length) {
                val index = i / Math.pow(26.0, j.toDouble()).toInt() % 26 // 计算当前字母的位置
                combination.insert(0, ('A'.code + index).toChar()) // 将字母插入到组合的最前面
            }

            // 输出当前字母组合
            println(combination.toString())
        }
    }
}